import { get, post, put, del, upload } from '@/utils/request'
import type { 
  UserProfile, 
  UpdateProfileRequest 
} from '@/types/api'

// 用户相关API
export const userApi = {
  // 获取用户信息
  getUserInfo: (id?: string): Promise<any> => {
    const url = id ? `/users/${id}` : '/users/profile'
    return get(url)
  },

  // 更新用户信息
  updateUserInfo: (data: UpdateProfileRequest): Promise<any> => {
    return put('/users/profile', data)
  },

  // 更新用户头像
  updateAvatar: (file: File): Promise<any> => {
    return upload('/users/avatar', file)
  },

  // 获取用户列表（管理员）
  getUserList: (params?: any): Promise<any> => {
    return get('/users', params)
  },

  // 创建用户（管理员）
  createUser: (data: any): Promise<any> => {
    return post('/users', data)
  },

  // 更新用户（管理员）
  updateUser: (id: string, data: any): Promise<any> => {
    return put(`/users/${id}`, data)
  },

  // 删除用户（管理员）
  deleteUser: (id: string): Promise<any> => {
    return del(`/users/${id}`)
  },

  // 启用/禁用用户（管理员）
  toggleUserStatus: (id: string, status: boolean): Promise<any> => {
    return post(`/users/${id}/toggle-status`, { status })
  },

  // 重置用户密码（管理员）
  resetUserPassword: (id: string): Promise<any> => {
    return post(`/users/${id}/reset-password`)
  },

  // 获取用户统计信息
  getUserStats: (): Promise<any> => {
    return get('/users/stats')
  },

  // 导出用户数据
  exportUsers: (params?: any): Promise<void> => {
    return get('/users/export', params, { responseType: 'blob' })
  }
}

// 角色权限相关API
export const roleApi = {
  // 获取角色列表
  getRoles: (): Promise<any> => {
    return get('/roles')
  },

  // 获取权限列表
  getPermissions: (): Promise<any> => {
    return get('/permissions')
  },

  // 分配用户角色
  assignUserRole: (userId: string, roleId: string): Promise<any> => {
    return post(`/users/${userId}/assign-role`, { roleId })
  },

  // 移除用户角色
  removeUserRole: (userId: string, roleId: string): Promise<any> => {
    return del(`/users/${userId}/roles/${roleId}`)
  }
}

// 通知相关API
export const notificationApi = {
  // 获取通知列表
  getNotifications: (params?: any): Promise<any> => {
    return get('/notifications', params)
  },

  // 标记通知为已读
  markAsRead: (id: string): Promise<any> => {
    return put(`/notifications/${id}/read`)
  },

  // 标记所有通知为已读
  markAllAsRead: (): Promise<any> => {
    return put('/notifications/mark-all-read')
  },

  // 删除通知
  deleteNotification: (id: string): Promise<any> => {
    return del(`/notifications/${id}`)
  },

  // 获取未读通知数量
  getUnreadCount: (): Promise<any> => {
    return get('/notifications/unread-count')
  }
}
